package com.example.myjavafx.controller;

import com.example.myjavafx.service.ApiService;
import javafx.fxml.FXML;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.scene.media.MediaView;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.nio.file.Files;
import java.nio.file.Path;

public class VideoPlayerController {
    @FXML
    private MediaView mediaView;
    private MediaPlayer mediaPlayer;
    private File tempVideoFile;

    @FXML
    private void initialize() {
        // 初始化时不做任何操作
    }

    @FXML
    private void playVideo() {
        // 从API获取视频流数据
        ApiService.fetchVideoStream(
            (videoData) -> {
                try {
                    // 创建临时文件
                    tempVideoFile = File.createTempFile("video", ".mp4");
                    tempVideoFile.deleteOnExit();

                    // 将二进制数据写入临时文件
                    try (FileOutputStream fos = new FileOutputStream(tempVideoFile)) {
                        fos.write(videoData);
                    }

                    // 创建Media对象
                    Media media = new Media(tempVideoFile.toURI().toString());

                    // 如果已经有一个MediaPlayer实例，先停止并释放资源
                    if (mediaPlayer != null) {
                        mediaPlayer.stop();
                        mediaPlayer.dispose();
                    }

                    // 创建新的MediaPlayer实例
                    mediaPlayer = new MediaPlayer(media);
                    mediaView.setMediaPlayer(mediaPlayer);

                    // 设置播放完成后的处理
                    mediaPlayer.setOnEndOfMedia(() -> {
                        mediaPlayer.stop();
                        try {
                            // 清理临时文件
                            Files.deleteIfExists(tempVideoFile.toPath());
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    });

                    // 开始播放
                    mediaPlayer.play();

                } catch (Exception e) {
                    e.printStackTrace();
                    // 这里应该添加适当的错误处理，比如显示错误消息给用户
                }
            },
            (error) -> {
                // 处理错误情况
                System.err.println("Error loading video: " + error);
            }
        );
    }

    // 在控制器被销毁时清理资源
    public void cleanup() {
        if (mediaPlayer != null) {
            mediaPlayer.stop();
            mediaPlayer.dispose();
        }
        if (tempVideoFile != null && tempVideoFile.exists()) {
            try {
                Files.deleteIfExists(tempVideoFile.toPath());
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}